// ts中的抽象类，它是提供其他类继承的基类，不能直接被实例化

// 用abstract关键字定义抽象类和抽象方法
  // 抽象类中的抽象方法不包含具体实现并且必须在派生类中实现

// abstract抽象方法只能放在抽象类里面

// 抽象类和抽象方法用来定义标准
  // 标准：Animal这个类要求它的子类必须包含eat
abstract class Animal{
  name: string
  constructor(name: string) {
    this.name = name
  }

  run() {
    console.log('非抽象方法，子类可以不实现');
  }

  // 报错：方法“eat”不能具有实现，因为它标记为抽象。
  // abstract eat(): any {}
  // 且g不包含具体实现
  abstract eat(): any
  // 若有子类继承，则子类必须实现eat()方法
}

// 报错：无法创建抽象类的实例。
// let animal = new Animal()
// 报错：非抽象类“Dog”没有实现继承自“Animal”类的抽象成员“eat”。
class Dog extends Animal {
// abstract class Dog extends Animal {
  constructor(name: string) {
    super(name)
  }
  eat(){
    console.log('yami yami')
  }
}

let dog = new Dog('花狗狗')
// yamiyami
dog.eat()
export {}
